home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).zip / Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).adf / tracker.library / Demos / Mem.asm < prev    next >
Assembly Source File  |  1994-01-09  |  3KB  |  149 lines

  1. ;TestProgramm für "tracker.library"
  2.  
  3. ; Testet TRK_AllocMem und TRK_FreeMem
  4.  
  5.     NOLIST
  6.     INCLUDE "exec/LVO.i"
  7.     INCLUDE "exec/memory.i"
  8.     INCLUDE "dos/LVO.i"
  9.     INCLUDE "dos/dosextens.i"
  10.     INCLUDE "tracker.i"
  11.     LIST
  12.  
  13. _TrackerBase:    EQUR a5
  14. _DosBase:    EQUR a4
  15. Output:     EQUR d7
  16.  
  17. ; WB-Message ?
  18.     sub.l    a1,a1        ;a1=0->eigener Task
  19.     CALLEXEC FindTask    ;Wo darf man denn nachschauen ?
  20.     move.l    d0,a0
  21.     tst.l    pr_CLI(a0)      ;von CLI oder WB aus gestartet ?
  22.     bne    fromCLI
  23. ;von WB aus:
  24.     lea    pr_MsgPort(a0),a0
  25.     move.l    a0,-(sp)
  26.     CALLEXEC WaitPort    ;auf Start-Message warten
  27.     move.l    (sp)+,a0
  28.     CALLEXEC GetMsg ;muß nachher beantwortet werden
  29.     move.l    d0,WBenchMsg
  30.  
  31. fromCLI:
  32. ; Tracker-Library öffnen
  33.     OPENLIB TrName
  34.     tst.l    d0
  35.     beq    ende_all
  36.     move.l    d0,_TrackerBase
  37.     TRK_OPENSTDLIB DOS,36
  38.     tst.l    d0
  39.     beq    ende_trk
  40.     move.l    d0,_DosBase
  41.  
  42.     tst.l    WBenchMsg
  43.     bne    fromWB
  44. ;von CLI aus -> Ausgaben ins CLI-Fenster
  45.     CALLDOS Output
  46.     move.l    d0,Output
  47.     bra    main
  48. ;von WB aus gestartet -> eigenes Window nötig
  49. fromWB: move.l    #WdName,d1
  50.     move.l    #MODE_OLDFILE,d2
  51.     CALLDOS Open
  52.     move.l    d0,Output
  53. ;---------------------------------------------------------------------------
  54. ;Haupt-Testteil
  55.  
  56. ALLOC:    MACRO    ;Bytes, Typ, sichern in
  57.     move.l    #\1,d0
  58.     move.l    #\2,d1
  59.     bsr    Alloc
  60.     move.l    d0,\3
  61.     ENDM
  62.  
  63. FREE:    MACRO    ;wo gesichert
  64.     move.l    \1,a1
  65.     bsr    Free
  66.     ENDM
  67.  
  68. main:    ALLOC    1111,MEMF_CLEAR,d6
  69.     ALLOC    55555,MEMF_PUBLIC,d5
  70.     ALLOC    12345,MEMF_CHIP!MEMF_CLEAR,d4
  71.     FREE    d5
  72.     ALLOC    122,MEMF_ANY,d6 ;der alte Speicherzeiger wird absichtlich
  73.                 ; überschrieben; d3 gäbe vielleicht Seiten-
  74.                 ; Effekte mit der Ausgabe
  75.     FREE    d4
  76.  
  77. ;---------------------------------------------------------------------------
  78.  
  79. ;ggf. Window schließen
  80.     tst.l    WBenchMsg
  81.     beq    ende_trk
  82.     move.l    Output,d1
  83.     move.l    #GoodBye,d2
  84.     move.l    #GoodByeLen,d3    ;jetzt sind die Speicher-Pointer uninteressant
  85.     CALLDOS Write
  86.     move.l    #150,d1
  87.     CALL    Delay
  88.     move.l    Output,d1
  89.     CALL    Close
  90. ;Library schließen
  91. ende_trk:
  92.     CLOSELIB _TrackerBase
  93. ende_all:
  94.     tst.l    WBenchMsg    ;war da was ?
  95.     beq    toCLI        ;na dann halt nicht
  96. ;Message zur WB zurück
  97.     move.l    WBenchMsg,a1
  98.     CALLEXEC ReplyMsg
  99. toCLI:    moveq    #0,d0
  100.     rts
  101. ;---------------------------------------------------------------------------
  102. ;Unterroutine: TRK_AllocMem testen
  103. ;Parameter: d0 = Größe des gewünschten Speicherbereichs
  104. ;        d1 = Anforderungen an den gewünschten Speicherbereich
  105. ;Ergebnis: Adresse des allozierten Speichers / 0 bei Fehler
  106.  
  107. Alloc:    movem.l d2/d3,-(sp)     ;d2/d3 sichern
  108.     movem.l d0-d2,-(sp)     ;Parameter für Ausgabe sichern;
  109.                 ;d2 ist Platzhalter für das Ergebnis
  110.     CALLTRK TRK_AllocMem
  111.     move.l    d0,8(sp)
  112.     move.l    Output,d1
  113.     move.l    #AllocText,d2
  114.     move.l    sp,d3
  115.     CALLDOS VFPrintf
  116.     add.w    #8,sp
  117.     movem.l (sp)+,d0/d2/d3  ;Ergebnis und d2/d3 holen
  118.     rts
  119. ;---------------------------------------------------------------------------
  120. ;Unterroutine: TRK_FreeMem testen
  121. ;Parameter: a1 = Adresse des Speicherbereichs
  122. ;Ergebnis: -
  123.  
  124. Free:    move.l    a1,d0
  125.     bne    1$
  126.     rts
  127. 1$:    movem.l d2/d3/a1,-(sp)  ;Register sichern
  128.     CALLTRK TRK_FreeMem
  129.     move.l    Output,d1
  130.     move.l    #FreeText,d2
  131.     moveq    #8,d3
  132.     add.l    sp,d3
  133.     CALLDOS VFPrintf
  134.     movem.l (sp)+,a2/a3/a1  ;Register zurück
  135.     rts
  136. ;---------------------------------------------------------------------------
  137.  
  138. WBenchMsg:    dc.l    0
  139.  
  140. TrName: TRACKERNAME
  141.  
  142. AllocText: dc.b "%ld Bytes of Memory Type $%lx allocated at $%06lx",10,0
  143. FreeText: dc.b    "Memory at $%06lx freed",10,0
  144. WdName: dc.b    "CON:////AllocMem-Test für tracker.library",0
  145. GoodBye: dc.b    10,"Bye - closing soon !"
  146. GoodByeLen: equ *-GoodBye
  147.  
  148.     END
  149.